/*
 * All right reserved@Raygo 2022~2030
 */

package com.raygo.runner.core.entity;

import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 流程上下文
 *
 * @author Raygo
 * @since 2022年8月6日
 */
public class FlowContext {
    /**
     * 全局输入
     */
    private static final Map<String, Object> GLOBAL_INPUT = new ConcurrentHashMap<>();
    /**
     * 本地输入
     */
    private final Map<String, Object> LOCAL_INPUT = new ConcurrentHashMap<>();
    /**
     * 全局结果字典
     */
    private static final Map<String, Object> GLOBAL_RESULT = new ConcurrentHashMap<>();
    /**
     * 本地结果字典
     */
    private final Map<String, Object> LOCAL_RESULT = new ConcurrentHashMap<>();

    /**
     * 设置全局输入
     *
     * @param input 输入
     */
    public static void setGlobalInput(Map<String, Object> input) {
        if (input == null) {
            return;
        }
        for (Entry<String, Object> entry : input.entrySet()) {
            GLOBAL_INPUT.put(entry.getKey(), entry.getValue());
        }
    }

    /**
     * 刷新全局输入
     *
     * @param key   键
     * @param value 值
     */
    public static void putGlobalInput(String key, Object value) {
        GLOBAL_INPUT.put(key, value);
    }

    /**
     * 设置本地输入
     *
     * @param input 输入
     */
    public void setLocalInput(Map<String, Object> input) {
        if (input == null) {
            return;
        }
        for (Entry<String, Object> entry : input.entrySet()) {
            LOCAL_INPUT.put(entry.getKey(), entry.getValue());
        }
    }

    /**
     * 刷新本地输入
     *
     * @param key   键
     * @param value 值
     */
    public void putLocalInput(String key, Object value) {
        LOCAL_INPUT.put(key, value);
    }

    /**
     * 刷新全局结果
     *
     * @param key   键
     * @param value 值
     */
    public static void putGlobalResult(String key, Object value) {
        GLOBAL_RESULT.put(key, value);
    }

    /**
     * 刷新本地结果
     *
     * @param key   键
     * @param value 值
     */
    public void putLocalResult(String key, Object value) {
        LOCAL_RESULT.put(key, value);
    }
}
